﻿//Configurações gerais do script
var version = "0.3.1";
var cabecalhoMensagem = "Verifique o(s) seguinte(s) erro(s):\n";
var rodapeMensagem = "Projeto Final";

//Instruções
//1° --> No formulário adicionar o atributo "onSubmit" com o valor "javascript: return validateForm('NOME_DO_FORMULARIO')"
//2° --> Nos campos a se validar colocar o atributo "validate", seu valor pode ser "true" ou "1"
//3° --> No campo com o atributo "validate" colocar adicionar o atributo "mensagem" e em seu valor o texto a ser
//		 exibido no aviso de alerta
//Obs.: Se você desejar especificar ainda outra função para validar o seu campo além do valor "vazio" você pode utilizar
//		o atributo "onValidate". Seu valor será a chamada para a função JavaScript que você deseja utilizar e o retorno da
//		mesma deverá ser "true" ou "false". Caso seja retornado o valor "false" o script tentará exibir o valor do atributo
//		"mensagemValidate", se este não existir será exibido o atributo "mensagem" que é o padrão.
//
//		Lembrando que os campos do tipo "radio" e "checkbox" necessitam que se atribua somente uma vez os atributos informados
//		nos 3 passos acima, recomenda-se colocar sempre no primeiro ítem por questão de organização


//Valida qualquer tipo de campo de formulário está em branco ou não selecionado nos browsers IE 5.5+, Firefox 1.0+, Opera 9+
//Criada em: 26/02/2007
//Autor: Davi Francelino
function validateForm(sFormulario) {
    var giveFocus = arguments.length > 1 ? arguments[1] : true;
    var form = eval("document." + sFormulario);
    var msg = cabecalhoMensagem + "\n";
    var erro = false; var marcado = false; var retorno = false;
    var arrMarcados = new Array(0); var arrPercorridos = new Array(0);
    var idx = 0; var i = 0; var dbg = false;

    if (dbg) { alert("Versão: " + version); }

    //Verifica se o formulário especificado existe
    if (form != null) {
        //Percorre todos os elementos do formulário
        for (i = 0; i < form.length; i++) {
            if (dbg) { alert('Nome: ' + form.elements[i].name + ' - Tipo: ' + form.elements[i].type); }
            //Valida os campos do tipo text
            if ((form.elements[i].type == "text") || (form.elements[i].type == "textarea") || (form.elements[i].type == "password") || (form.elements[i].type == "hidden")) {
                //Verifica se o atributo "validate" foi especificado
                validate = form.elements[i].getAttribute("validate");
                if (validate != null) {
                    //Verifica se o atributo está como true ou 1
                    if ((validate == "1") || (validate.toString().toUpperCase() == "TRUE")) {
                        //Verifica se algo foi preenchido no campo
                        if (form.elements[i].value == "") {
                            //Manda o foco para o elemento caso seja o primeiro a dar erro
                            if (!erro) {
                                if (giveFocus) {
                                    form.elements[i].focus();
                                }
                            }
                            erro = true;
                            //Verifica se o atributo "mensagem" foi especificado
                            mensagem = form.elements[i].getAttribute("mensagem");
                            if (mensagem != null) {
                                msg += "\n" + mensagem;
                            } else {
                                msg += "\n" + form.elements[i].name;
                            }
                        } else {
                            //Verifica se o evento "onValidate" existe
                            onValidate = form.elements[i].getAttribute("onValidate");
                            if (onValidate != null) {
                                retorno = eval(onValidate);
                                if (!retorno) {
                                    //Manda o foco para o elemento caso seja o primeiro a dar erro
                                    if (!erro) {
                                        if (giveFocus) {
                                            form.elements[i].focus();
                                        }
                                    }
                                    erro = true;
                                    //Verifica se o atributo "mensagemValidate" foi especificado
                                    mensagemValidate = form.elements[i].getAttribute("mensagemValidate");
                                    if (mensagemValidate != null) {
                                        msg += "\n" + mensagemValidate;
                                    } else {
                                        //Verifica se o atributo "mensagem" foi especificado
                                        mensagem = form.elements[i].getAttribute("mensagem");
                                        if (mensagem != null) {
                                            msg += "\n" + mensagem;
                                        } else {
                                            msg += "\n" + form.elements[i].name;
                                        }
                                    }
                                }
                            }
                        }
                    } //Fim do If validate true
                } //Fim do If "validate"
            } //Fim do If "text"
            //Valida os campos do tipo "checkbox" e "radio"
            if (form.elements[i].type == "checkbox" || form.elements[i].type == "radio") {
                //Verifica se o elemento para validar existe
                validate = form.elements[i].getAttribute("validate");
                if (validate != null) {
                    //Verifica se o atributo está como true ou 1
                    if ((validate == "1") || (validate.toString().toUpperCase() == "TRUE")) {
                        if (isInArray(arrPercorridos, form.elements[i].name) == false) {
                            //if(arrPercorridos.toString().indexOf(form.elements[i].name) <= -1) {
                            arrPercorridos.push(form.elements[i].name);

                            //Busca o índice da posição no array
                            idx = arrMarcados.toString().indexOf(form.elements[i].name);
                            if (idx <= -1) {
                                //Verifica se está marcado algum dos checkbox
                                marcado = validateCheckRadioMarcado(sFormulario, form.elements[i].name);
                                if (dbg) { alert(form.elements[i].name + ' está marcado? ' + marcado); }
                                //Se não estiver marcado nenhum 
                                if (marcado == false) {
                                    //Se não estiver no array insere
                                    arrMarcados.push(form.elements[i].name);
                                    //Manda o foco para o elemento caso seja o primeiro a dar erro
                                    if (!erro) {
                                        if (giveFocus) {
                                            form.elements[i].focus();
                                        }
                                    }
                                    erro = true;
                                    //Verifica se o atributo "mensagem" foi especificado
                                    mensagem = form.elements[i].getAttribute("mensagem");
                                    if (mensagem != null) {
                                        msg += "\n" + mensagem;
                                    } else {
                                        msg += "\n" + form.elements[i].name;
                                    }
                                } else {
                                    //Verifica se o evento "onValidate" existe
                                    onValidate = form.elements[i].getAttribute("onValidate");
                                    if (onValidate != null) {
                                        retorno = eval(onValidate);
                                        if (!retorno) {
                                            //Manda o foco para o elemento caso seja o primeiro a dar erro
                                            if (!erro) {
                                                if (giveFocus) {
                                                    form.elements[i].focus();
                                                }
                                            }
                                            erro = true;
                                            //Verifica se o atributo "mensagemValidate" foi especificado
                                            mensagemValidate = form.elements[i].getAttribute("mensagemValidate");
                                            if (mensagemValidate != null) {
                                                msg += "\n" + mensagemValidate;
                                            } else {
                                                //Verifica se o atributo "mensagem" foi especificado
                                                mensagem = form.elements[i].getAttribute("mensagem");
                                                if (mensagem != null) {
                                                    msg += "\n" + mensagem;
                                                } else {
                                                    msg += "\n" + form.elements[i].name;
                                                }
                                            }
                                        }
                                    }
                                } // Fim do If se não marcado
                            } //Fim do If se não estiver no array
                        } //Fim do If se não tiver sido percorrido
                    } // Fim do If se validate true
                } //Fim do If validate
            } //Fim do If "checkbox" e "radio"
            //Verifica se o select está preenchido
            if ((form.elements[i].type == "select-one") || (form.elements[i].type == "select-multiple")) {
                //Verifica se o elemento para validar existe
                validate = form.elements[i].getAttribute("validate");
                if (validate != null) {
                    //Verifica se o atributo está como true ou 1
                    if ((validate == "1") || (validate.toString().toUpperCase() == "TRUE")) {
                        //Verifica se algo foi preenchido no campo
                        if ((form.elements[i].value == "") || (form.elements[i].value == "0")) {
                            //Manda o foco para o elemento caso seja o primeiro a dar erro
                            if (!erro) {
                                if (giveFocus) {
                                    form.elements[i].focus();
                                }
                            }
                            erro = true;
                            //Verifica se o atributo "mensagem" foi especificado
                            mensagem = form.elements[i].getAttribute("mensagem");
                            if (mensagem != null) {
                                msg += "\n" + mensagem;
                            } else {
                                msg += "\n" + form.elements[i].name;
                            }
                        } else {
                            //Verifica se o evento "onValidate" existe
                            onValidate = form.elements[i].getAttribute("onValidate");
                            if (onValidate != null) {
                                retorno = eval(onValidate);
                                if (!retorno) {
                                    //Manda o foco para o elemento caso seja o primeiro a dar erro
                                    if (!erro) {
                                        if (giveFocus) {
                                            form.elements[i].focus();
                                        }
                                    }
                                    erro = true;
                                    //Verifica se o atributo "mensagemValidate" foi especificado
                                    mensagemValidate = form.elements[i].getAttribute("mensagemValidate");
                                    if (mensagemValidate != null) {
                                        msg += "\n" + mensagemValidate;
                                    } else {
                                        //Verifica se o atributo "mensagem" foi especificado
                                        mensagem = form.elements[i].getAttribute("mensagem");
                                        if (mensagem != null) {
                                            msg += "\n" + mensagem;
                                        } else {
                                            msg += "\n" + form.elements[i].name;
                                        }
                                    }
                                }
                            }
                        }
                    } // Fim do If se validate true
                } //Fim do If validate
            } //Fim fo If "select-one" ou "select-multiple"
            //Verifica se o file está preenchido
            if (form.elements[i].type == "file") {
                //Verifica se o elemento para validar existe
                validate = form.elements[i].getAttribute("validate");
                if (validate != null) {
                    //Verifica se o atributo está como true ou 1
                    if ((validate == "1") || (validate.toString().toUpperCase() == "TRUE")) {
                        //Verifica se algo foi preenchido no campo
                        if ((form.elements[i].value == "")) {
                            //Manda o foco para o elemento caso seja o primeiro a dar erro
                            if (!erro) {
                                if (giveFocus) {
                                    form.elements[i].focus();
                                }
                            }
                            erro = true;
                            //Verifica se o atributo "mensagem" foi especificado
                            mensagem = form.elements[i].getAttribute("mensagem");
                            if (mensagem != null) {
                                msg += "\n" + mensagem;
                            } else {
                                msg += "\n" + form.elements[i].name;
                            }
                        } else {
                            //Verifica se o evento "onValidate" existe
                            onValidate = form.elements[i].getAttribute("onValidate");
                            if (onValidate != null) {
                                retorno = eval(onValidate);
                                if (!retorno) {
                                    //Manda o foco para o elemento caso seja o primeiro a dar erro
                                    if (!erro) {
                                        if (giveFocus) {
                                            form.elements[i].focus();
                                        }
                                    }
                                    erro = true;
                                    //Verifica se o atributo "mensagemValidate" foi especificado
                                    mensagemValidate = form.elements[i].getAttribute("mensagemValidate");
                                    if (mensagemValidate != null) {
                                        msg += "\n" + mensagemValidate;
                                    } else {
                                        //Verifica se o atributo "mensagem" foi especificado
                                        mensagem = form.elements[i].getAttribute("mensagem");
                                        if (mensagem != null) {
                                            msg += "\n" + mensagem;
                                        } else {
                                            msg += "\n" + form.elements[i].name;
                                        }
                                    }
                                }
                            }
                        }
                    } // Fim do If se validate true
                } //Fim do If validate
            } //Fim do If "file"
        } //Fim do FOR 

        if (erro) {
            msg += "\n\n" + rodapeMensagem;
            alert(msg);
            return false;
        } else {
            return true;
        }
    } else {
        alert("Formulário não encontrado!");
        return false;
    }
}
//Função utilizada pela validateForm para verificar se o(s) "checkbox" ou "radio" está(ão) marcado(s)
function validateCheckRadioMarcado(sFormulario, sNameCheckRadio) {
    var blnMarcado = false;
    var i = 0;

    objCheck = eval("document." + sFormulario + "." + sNameCheckRadio);
    if (objCheck == null) {
        alert("A função validateCheckRadioMarcado não encontrou o campo");
    } else {
        if (typeof (objCheck.length) != 'undefined') {
            for (i = 0; i < objCheck.length; i++) {
                if (objCheck[i].checked == true) {
                    blnMarcado = true;
                    break;
                }
            }
        } else {
            if (objCheck.checked == true) {
                blnMarcado = true;
            }
        }
    }
    return blnMarcado;
}
//Função utilizada para preencher campos "Hidden" porque o PHP não suporta request de "checkbox"
//e "radiobutton" com mais de um ítem marcado
function fillHiddenCheckRadioValues(objFieldHidden, objCheck) {
    if (objFieldHidden != null) {
        objFieldHidden.value = "";
        objFieldHidden.value = SliceCheckRadioValues(objCheck);
        return true;
    } else {
        return false;
    }
}

function SliceCheckRadioValues(objCheck) {
    var valores = ""; var cont = 0;
    if (objCheck == null) {
        alert("A função SliceCheckRadioValues não encontrou o campo");
    } else {
        if (typeof (objCheck.length) != 'undefined') {
            for (cont = 0; cont < objCheck.length; cont++) {
                if (objCheck[cont].checked == true) {
                    if (valores != "") {
                        valores += ", " + objCheck[cont].value;
                    } else {
                        valores = objCheck[cont].value;
                    }
                }
            }
        } else {
            if (objCheck.checked == true) {
                valores = objCheck.value;
            }
        }
    }
    return valores;
}

function isInArray(array, valor) {
    var cont = 0;
    if (array != null && array.length != 0) {
        for (cont = 0; cont < array.length; cont++) {
            if (array[cont] == valor) {
                //alert(array[cont] + " == " + valor);
                return true;
            }
        }
        return false;
    }
    return false;
}

//=================================================================================================================
// Revisão de código por Rafael Cruz [ 10/09/2008 ]
// Validação dos campos do carrinho de compras
function checkForm(quem) {

    var check = false;
    var checkErro = "";
    var checkCampo = quem.getElementsByTagName("input");

    if (checkCampo) {
        for (var i = 0; i < checkCampo.length; i++) {
            if (checkCampo[i].type == "text" && checkCampo[i].value) { check = true; }
        }
    }

    var checkMsg = cabecalhoMensagem + "\n" + "Preencha ao menos um dos campos de quantidade" + "\n\n" + rodapeMensagem;

    if (!check) { alert(checkMsg); }

    return check;
}

/*********************************************************************************************************/

//Valida se um campo contém um valor que represente um e-mail
function isMail(form, campo, alerta) {
    var re = new RegExp;
    strMail = eval('document.' + form + '.' + campo + '.value');

    re = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
    var arr = re.exec(strMail);
    if (arr == null) {
        if (alerta && eval("document." + form + "." + campo + ".value != ''")) {
            msg = confirm("O formato do e-mail informado é inválido!\n\nVocê deseja corrigir o e-mail?");
            if (msg) {
                eval('document.' + form + '.' + campo + '.focus();');
            }
        }
        return false;
    }
    else {
        return true;
    }
}

//PERMITE SÓ NÚMEROS
//PADRÃO : onKeypress="return permiteSoNumeros(event);"
function permiteSoNumeros(event) {
    var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
    var caract = new RegExp(/^[0-9 ]+$/i);
    if ((keyCode != 36) && (keyCode != 8) && (keyCode != 13) && (keyCode != 9)) {
        caract = caract.test(String.fromCharCode(keyCode));
    }
    //------------------------
    if (!caract) {
        keyCode = 0;
        return false;
    }
}
//PERMITE SÓ NÚMEROS ALÉM DE "," E "."
//PADRÃO : onKeypress="return permiteSoNumerosExtra(event);"
function permiteSoNumerosExtra(event) {
    var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
    var caract = new RegExp(/^[0-9 ]+$/i);
    if ((keyCode != 36) && (keyCode != 8) && (keyCode != 13) && (keyCode != 44) && (keyCode != 46)) {
        caract = caract.test(String.fromCharCode(keyCode));
    }
    //------------------------
    if (!caract) {
        keyCode = 0;
        return false;
    }
}

//Formata o telefone xx-xxxx-xxxx
function FormataFone(obj) {
    if (obj != null) {
        if ((obj.value.length == 2) || (obj.value.length == 7)) {
            obj.value = obj.value + "-";
        }
    }
}

//Formata o CEP xxxxx-xxx
function FormataCEP(obj) {
    if (obj != null) {
        if (obj.value.length == 5) {
            obj.value = obj.value + "-";
        }
    }
}
//Formata o CNPJ xx.xxx.xxx/xxxx-xx
function FormataCNPJ(obj) {
    if (obj != null) {
        if ((obj.value.length == 2) || (obj.value.length == 6)) {
            obj.value = obj.value + ".";
        }
        if (obj.value.length == 10) {
            obj.value = obj.value + "/";
        }
        if (obj.value.length == 15) {
            obj.value = obj.value + "-";
        }
    }
}

//Formata o CPF xxx.xxx.xxx-xx
function FormataCPF(obj) {
    if (obj != null) {
        if ((obj.value.length == 3) || (obj.value.length == 7)) {
            obj.value = obj.value + ".";
        }
        if (obj.value.length == 11) {
            obj.value = obj.value + "-";
        }
    }
}

//Formata a placa AAA-0000
function FormataPlaca(obj) {
    if (obj != null) {
        if (obj.value.length == 3) {
            obj.value = obj.value + "-";
        }
    }
}

//Formata valor monetário
function formatar_moeda(campo, separador_milhar, separador_decimal, tecla) {
    var sep = 0;
    var key = '';
    var i = j = 0;
    var len = len2 = 0;
    var strCheck = '0123456789';
    var aux = aux2 = '';
    var whichCode = (window.Event) ? tecla.which : tecla.keyCode;

    if (whichCode == 13) return true; // Tecla Enter
    if (whichCode == 8) return true; // Tecla Delete
    key = String.fromCharCode(whichCode); // Pegando o valor digitado
    if (strCheck.indexOf(key) == -1) return false; // Valor inválido (não inteiro)
    len = campo.value.length;
    for (i = 0; i < len; i++)
        if ((campo.value.charAt(i) != '0') && (campo.value.charAt(i) != separador_decimal)) break;
    aux = '';
    for (; i < len; i++)
        if (strCheck.indexOf(campo.value.charAt(i)) != -1) aux += campo.value.charAt(i);
    aux += key;
    len = aux.length;
    if (len == 0) campo.value = '';
    if (len == 1) campo.value = '0' + separador_decimal + '0' + aux;
    if (len == 2) campo.value = '0' + separador_decimal + aux;
    if (len > 2) {
        aux2 = '';
        for (j = 0, i = len - 3; i >= 0; i--) {
            if (j == 3) {
                aux2 += separador_milhar;
                j = 0;
            }
            aux2 += aux.charAt(i);
            j++;
        }
        campo.value = '';
        len2 = aux2.length;
        for (i = len2 - 1; i >= 0; i--)
            campo.value += aux2.charAt(i);
        campo.value += separador_decimal + aux.substr(len - 2, len);
    }
    return false;
}

function vcnpj(c) {
    var numeros, digitos, soma, i, resultado, pos, tamanho, digitos_iguais, cnpj = c.value.replace(/\D+/g, '').replace('.', '').replace('/', '');
    digitos_iguais = 1;

    if (cnpj.length != 14) {
        return false;
    }

    for (i = 0; i < cnpj.length - 1; i++) {
        if (cnpj.charAt(i) != cnpj.charAt(i + 1)) {
            digitos_iguais = 0;
            break;
        }
    }
    if (!digitos_iguais) {
        tamanho = cnpj.length - 2;
        numeros = cnpj.substring(0, tamanho);
        digitos = cnpj.substring(tamanho);
        soma = 0;
        pos = tamanho - 7;
        for (i = tamanho; i >= 1; i--) {
            soma += numeros.charAt(tamanho - i) * pos--;
            if (pos < 2)
                pos = 9;
        }
        resultado = soma % 11 < 2 ? 0 : 11 - soma % 11;
        if (resultado != digitos.charAt(0)) {
            return false;
        }
        tamanho = tamanho + 1;
        numeros = cnpj.substring(0, tamanho);
        soma = 0;
        pos = tamanho - 7;
        for (i = tamanho; i >= 1; i--) {
            soma += numeros.charAt(tamanho - i) * pos--;
            if (pos < 2)
                pos = 9;
        }
        resultado = soma % 11 < 2 ? 0 : 11 - soma % 11;
        if (resultado != digitos.charAt(1)) {
            return false;
        } else {
            return true;
        }
    } else {
        return false;
    }
}

function vcpf(c) {
    var POSICAO, I, SOMA, DV, DV_INFORMADO;
    var DIGITO = new Array(10);
    var CPF = c.value.replace(/\D+/g, '').replace('.', '');
    //alert(CPF);
    DV_INFORMADO = CPF.substr(9, 2); // Retira os dois últimos dígitos do número informado
    // Desemembra o número do CPF na array DIGITO
    for (I=0; I<=8; I++) {
        DIGITO[I] = CPF.substr( I, 1);
    }
    // Calcula o valor do 10º dígito da verificação
    POSICAO = 10;
    SOMA = 0;
    for (I=0; I<=8; I++) {
        SOMA = SOMA + DIGITO[I] * POSICAO;
        POSICAO = POSICAO - 1;
    }
    DIGITO[9] = SOMA % 11;
    if (DIGITO[9] < 2) {
        DIGITO[9] = 0;
    } else {
        DIGITO[9] = 11 - DIGITO[9];
    }
    // Calcula o valor do 11º dígito da verificação
    POSICAO = 11;
    SOMA = 0;
    for (I=0; I<=9; I++) {
        SOMA = SOMA + DIGITO[I] * POSICAO;
        POSICAO = POSICAO - 1;
    }
    DIGITO[10] = SOMA % 11;
    if (DIGITO[10] < 2) {
        DIGITO[10] = 0;
    } else {
        DIGITO[10] = 11 - DIGITO[10];
    }
    // Verifica se os valores dos dígitos verificadores conferem
    DV = DIGITO[9] * 10 + DIGITO[10];
    if(CPF == ""){
        return false;
    } else {
        if (DV != DV_INFORMADO) {
            return false;
        } else {
            return true;
        }
    }
}